/*
 * client.cpp
 *
 */
#include "../common/Argv.h"
#include <sstream>
#include "clienteCommon.h"
#include "../application/DespachoAPI.h"
#include "../application/VendedorAPI.h"
#include "../logger/logger.h"
#include "../channel_common/agent_address_service/AgentAddressService.h"

int main(int argc, char **argv)
{
	std::string hostName = "cliente_pc";
	//Toma argumentos (main)
	Argv args(argv);

	//Si se le pasa un argumento tomarlo como hostname
	if (args.getArgc() == 2)
		hostName = args.getArg(1);

	int clientId = channel::AgentAddressService::getAddress();

	std::stringstream ss;

	CLogger::create("Cliente "+StringUtils::NumberToString(clientId));
	CLogger::setLevel(LogLevelEnum::TRACE);

	CLogger::log("Cliente started", LogLevelEnum::INFO);
	application::VendedorAPI vendedor(hostName, clientId);
	application::DespachoAPI despacho(hostName, clientId);

	ProductoCantidadList productList;
	ProductoCantidad prod;
	OrdenCompra ordenCompra;

	prod.tipo = 1;
	prod.cantidad = 5;
	productList.push_back(prod);

	prod.tipo = 2;
	prod.cantidad = 4;
	productList.push_back(prod);

	ordenCompra = vendedor.hacerOrdenCompra(clientId,productList);

//	ordenCompra.header.clientId =2222;

	ProductoList listaProductos;
	ProductoCantidad prodRetirar;

	prodRetirar.tipo = 1;
	prodRetirar.cantidad = 1;

	despacho.retirarPedido(ordenCompra,prodRetirar,listaProductos);

	CLogger::log("Cliente ended", LogLevelEnum::INFO);
	return 0;
}
